package com.vitogiovanni.tobook;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import android.app.Fragment;
import android.app.FragmentManager;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import com.google.api.client.extensions.android.http.AndroidHttp;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.vitogiovanni.tobook.entity.prenotazioneendpoint.Prenotazioneendpoint;
import com.vitogiovanni.tobook.entity.prenotazioneendpoint.model.Prenotazione;
import com.vitogiovanni.tobook.entity.prenotazioneendpoint.model.PrenotazioneCollection;
import com.vitogiovanni.tobook.utilities.NetworkChecker;
import com.vitogiovanni.tobook.utilities.PrenotazioneTaskCompleteListener;

public class ListaPrenotazioniActivity extends BaseActivity implements PrenotazioneTaskCompleteListener<List<Prenotazione>>{

	private ProgressDialog progressDialog;
	private Fragment fragmentListaPrenotazioni;
	private PrenotazioneTask prenotazioneTask;
	private Toast toast;
	
	@Override
	protected void onStop()
	{
		super.onStop();
		if(prenotazioneTask != null)
		{
			prenotazioneTask.cancel(true);
		}
		if(toast != null)
		{
			toast.cancel();
		}
		
		
	}
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		if (!NetworkChecker.isInternetAvailable(ListaPrenotazioniActivity.this)) {
			NetworkChecker.noConnectionToast(ListaPrenotazioniActivity.this);
			return;
		}
		setContentView(R.layout.activity_lista_prenotazioni);

		Intent intent = getIntent();
		String email = intent.getStringExtra(MainActivity.EMAIL_UTENTE);
		
		prenotazioneTask = (PrenotazioneTask) new PrenotazioneTask(this, this).execute(email);
		progressDialog = ProgressDialog.show(
				ListaPrenotazioniActivity.this, "", "Caricamento in corso",
				true, true, new OnCancelListener() {
					public void onCancel(DialogInterface dialog) {
						
					}
				});
		progressDialog.setCanceledOnTouchOutside(false);
	}
	/*
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		super.onCreateOptionsMenu(menu);
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.lista_prenotazioni, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		super.onOptionsItemSelected(item);
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
	*/
	/**
	 * A placeholder fragment containing a simple view.
	 */
	public static class PlaceholderFragment extends Fragment {

		public PlaceholderFragment() {
		}

		@Override
		public View onCreateView(LayoutInflater inflater, ViewGroup container,
				Bundle savedInstanceState) {
			View rootView = inflater.inflate(
					R.layout.fragment_lista_prenotazioni, container, false);
			return rootView;
		}
	}
	
	@Override
	public void onPrenotazioneTaskComplete(List<Prenotazione> result) {
		if (progressDialog != null) 
		{
			progressDialog.dismiss();
		}
		FragmentManager fragManager = getFragmentManager();
		if(fragmentListaPrenotazioni == null){
			fragmentListaPrenotazioni = fragManager.findFragmentById(R.id.listaPrenotazioni);
		}
		if(result != null && result.size() > 0)
		{
			((ListaPrenotazioniFragment)fragmentListaPrenotazioni).updateListaPrenotazioni(result);
		}
		else{
			Context context = getApplicationContext();
			CharSequence text = getString(R.string.no_prenotazioni);
			int duration = Toast.LENGTH_LONG;

			toast = Toast.makeText(context, text, duration);
			toast.show();
		}
	}
	
	private class PrenotazioneTask extends AsyncTask<String, Void, List<Prenotazione>>
	{
		private PrenotazioneTaskCompleteListener<List<Prenotazione>> callback;
		
		public PrenotazioneTask(Context context, PrenotazioneTaskCompleteListener<List<Prenotazione>> cb)
		{
			this.callback = cb;
		}
		
		@Override
		protected List<Prenotazione> doInBackground(String... arg0) {
			
			Prenotazioneendpoint.Builder builder1 = new Prenotazioneendpoint.Builder(
					AndroidHttp.newCompatibleTransport(), new JacksonFactory(),
					null);
			builder1 = CloudEndpointUtils.updateBuilder(builder1);
			builder1.setApplicationName("to-book");
			Prenotazioneendpoint prenotazioneEndpoint = builder1.build();
			List<Prenotazione> prenotazioni = new ArrayList<Prenotazione>();
			List<Prenotazione> prenotazioniTemp = new ArrayList<Prenotazione>();

			String emailUtente = arg0[0];
			
			try{
				PrenotazioneCollection prenotazioniColl = prenotazioneEndpoint.listPrenotazioneByEmail(emailUtente).execute();
				prenotazioniTemp = prenotazioniColl.getItems();
			}catch(IOException e){
				e.printStackTrace();
			}

			if(prenotazioniTemp != null)
			{
				for(Prenotazione pren: prenotazioniTemp)
					{
						prenotazioni.add(pren);
					}
			}
			return prenotazioni;
			
		}
		
		@Override
		protected void onPostExecute(List<Prenotazione> result) {
			
			if (progressDialog != null) 
			{
				progressDialog.dismiss();
			}
			callback.onPrenotazioneTaskComplete(result);

		}	
	}
	
	@Override
	public void onBackPressed(){
		super.onBackPressed();
		
		Intent homeIntent = new Intent(ListaPrenotazioniActivity.this, MainActivity.class);
		homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
		startActivity(homeIntent);
	}

}
